# # pytest 数据驱动（Data Driven Testing. DDt) 是接口测试，UI测试中最常用的设计方法之一
#
# # 一，什么是数据驱动（Data Driven Testing）
# # 数据驱动，就是把测试逻辑和测试数据分离
# # 测试脚本只定义 执行逻辑（怎么测）
# # 测试数据单独存放（测什么数据）
# # pytest 在运行时候把不同的数据自动组合成多条用例执行
# # 优点
# # 1，不需要重复编写相似的测试用例
# # 2，新增测试场景只需修改数据
# # 3，结合Allure，可在报告中清晰展示每组数据
#
# # 二， Pytest数据驱动的几种常见方式
# # 1,  @pytest.mark.parametrize (最常用，简洁，适用数据量小，写在代码里）
# # 2，从外部文件读取（CSV，Excel,Json,YAML,ini,使用于数据较多，配置类，接口类测试)
# # 3,fixture动态生成数据 (适用于多模块复用数据，较复杂系统测试）
#
#
# #实列 1，@pytest.mark.parametrize --最基础的数据驱动
# import pytest
#
# class TestLogin:
#     @pytest.mark.parametrize(
#         "username,password,expected", #参数名
#         [
#             ('admin','1234456',True),
#             ('nasa','123456',True),
#             ('bell','123456',False),
#             ('admin','234324',False)
#         ]
#     )
#     def test_login(self,username,password,expected):
#         """简单演示数据驱动"""
#         result = (username == 'admin' and password == '123456') or (username == 'bell' and password == '123456')
#         assert result == expected, f'登录验证失败{username}'
#
# # 特点
# 1,parametrize 参数名要和测试函数入参一致
# 2，每一行数据都会生成一天独立的测试用例

#四，实列 从外部文件读取数据（更常用）

# import yaml,os,pytest
#
# def load_yaml_data(filename):
#     data_path = os.path.join(os.path.dirname(__file__),filename)
#     with open(data_path, encoding='utf-8') as f:
#         return yaml.safe_load(f)
# class TestLogin:
#     @pytest.mark.parametrize("case", load_yaml_data('nasa.yaml'))
#     def test_lgin_yaml(self, case):
#         username = case["username"]
#         password = case["password"]
#         expected = case["expected"]
#         result = (username == 'admin' and password == '123456') or (username == 'bell' and password == '123456')
#         assert result == expected, f'登录验证失败 {case}'


# 五、示例①:fixture 动态生成测试数据
import pytest

# @pytest.fixture(params=[
# {"username": "admin", "password": "123456","expected": True